#include <iostream>
#include <thread>
#include <vector>

// 定义一个简单的类
class MyClass {
public:
    MyClass() {
        std::cout << "MyClass constructor" << std::endl;
    }
    ~MyClass() {
        std::cout << "MyClass destructor" << std::endl;
    }
};

// 函数：模拟普通类型内存泄漏
void leakPrimitiveMemory() {
    int* intPtr = new int(42);
    // 故意不释放内存
    // delete intPtr;
}

// 函数：模拟类对象内存泄漏
void leakClassObjectMemory() {
    MyClass* objPtr = new MyClass();
    // 故意不释放内存
    // delete objPtr;
}

// 线程函数：模拟多线程内存申请释放
void threadFunction() {
    for (int i = 0; i < 10; ++i) {
        int* intArray = new int[100];
        MyClass* objArray = new MyClass[10];

        // 部分释放内存，制造泄漏
        delete[] intArray;
        // 故意不释放 objArray
        // delete[] objArray;
    }
}

int main() {
    // 普通类型内存泄漏
    leakPrimitiveMemory();

    // 类对象内存泄漏
    leakClassObjectMemory();

    // 多线程内存申请释放
    std::vector<std::thread> threads;
    for (int i = 0; i < 5; ++i) {
        threads.emplace_back(threadFunction);
    }

    // 等待所有线程完成
    for (auto& thread : threads) {
        thread.join();
    }

    std::cout << "Main function finished." << std::endl;
    return 0;
}    